/*
 * Copyright 2014 Щекотова Ангелина Александровна.
 * Этот файл — часть J4JClientServer Framework
 * J4JClientServer Framework - свободная программа: вы можете перераспространять ее и/или изменять
 * ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде, в каком
 * она была опубликована Фондом свободного программного обеспечения; либо
 * версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
 *
 * J4JClientServer Framework распространяется в надежде, что она будет полезной,
 * но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
 * или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
 * общественной лицензии GNU.
 *
 * Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
 * вместе с этой программой. Если это не так, см.
 * <http://www.gnu.org/licenses/>.
 */

package ru.java4java.ClientServerFramework.interfaces;

import ru.java4java.ClientServerFramework.Server;

import java.util.Collection;

public abstract class ServerListenerAdapter implements ServerListener {

    @Override
    public void beforeAccept(Server server) {

    }

    @Override
    public void afterAccept(Server server) {

    }

    @Override
    public void beforeStart(Server server) {

    }

    @Override
    public void beforeShutdown(Server server) {

    }

    @Override
    public void afterShutdown(Server server) {

    }

    @Override
    public void beforeShutdownClients(Server server) {

    }

    @Override
    public void afterShutdownClients(Server server) {

    }

    public static enum OperationType {
        BEFORE_ACCEPT,
        AFTER_ACCEPT,
        BEFORE_START,
        BEFORE_SHUTDOWN,
        AFTER_SHUTDOWN,
        BEFORE_SHUTDOWN_CLIENTS,
        AFTER_SHUTDOWN_CLIENTS
    }

    public static void runListeners(Server server, Collection<ServerListener> listeners, OperationType operation) {
        for (ServerListener listener: listeners) {
            switch (operation) {
                case BEFORE_ACCEPT:           listener.beforeAccept(server);          break;
                case AFTER_ACCEPT:            listener.afterAccept(server);           break;
                case BEFORE_START:            listener.beforeStart(server);           break;
                case BEFORE_SHUTDOWN:         listener.beforeShutdown(server);        break;
                case AFTER_SHUTDOWN:          listener.afterShutdown(server);         break;
                case BEFORE_SHUTDOWN_CLIENTS: listener.beforeShutdownClients(server); break;
                case AFTER_SHUTDOWN_CLIENTS:  listener.afterShutdownClients(server);  break;
                default: throw new IllegalArgumentException("(3th argument)Undefined Operation Type: " + operation.name());
            }
        }
    }
}
